home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / 91xx / 9112a.d64 / listing 3 < prev    next >
Text File  |  1995-03-30  |  2KB  |  108 lines

  1.  Listing 3:
  2.  
  3. sei
  4. ldx  #$00 ;Erstellen
  5. :maktabtxa ;einer
  6. clc ;Funktionstabelle
  7. adc  #$01 ;für
  8. and  #$07 ;die
  9. ora  #$38 ;Speicherstellen
  10. sta  tb11,x ;$d011 und
  11. txa ;$d018
  12. adc  #$01
  13. asl
  14. asl
  15. asl
  16. asl
  17. ora  #$08
  18. and  #$7f
  19. sta  tb18,x
  20. inx
  21. cpx  #200 ;200 Rasterzeilen ?
  22. bne  maktab
  23. lda  #$70 ;letzte Zeile kein DMA
  24. sta  tb11+199 ;und Restzeilen schwarz
  25. lda  #$08
  26. sta  tb18+199
  27. lda  #<neuirq ;IRQ-Vektor
  28. ldx  #>neuirq ;verbiegen
  29. sta  $0314
  30. stx  $0315
  31. lda  #$1b
  32. sta  $d011 ;$d011-init
  33. lda  #$18
  34. sta  $d016 ;MC-ein
  35. lda  #$00
  36. sta  $d015 ;Sprite-Register löschen
  37. sta  $d020
  38. sta  $d021
  39. sta  $dc0e ;Timer-Stop
  40. lda  #$4c ;neuen Timerwert für den
  41. sta  $dc05 ;ersten IRQ setzen
  42. lda  #$c7-63
  43. sta  $dc04
  44.  
  45. :wait1lda  $d011 ;auf Zeile $030 warten
  46. bpl  wait1
  47.  
  48. :wait2lda  $d011
  49. bmi  wait2
  50.  
  51. lda  #$30
  52. :wait3cmp  $d012
  53. bne  wait3
  54.  
  55. ldx  #$11 ;Synchronisation des
  56. lda  #$18 ;Timers auf immer dieselbe
  57. sta  $d011 ;horizontale Position durch
  58. stx  $dc0e ;DMA-Zyklen-Ausgleich
  59. lda  #$3b
  60. sta  $d011
  61. lda  $dc0d ;IRQ-Flag löschen
  62. lda  $dd00 and  #$fc
  63. ora  #$02
  64. sta  $dd00 ;Bank 1 ein
  65. cli
  66. rts
  67.  
  68. :neuirqlda  #$9f ;Maximalwert der vergangenen
  69. sec ;Zyklen vergleichen
  70. sbc  $dc04
  71. cmp  #$0b
  72. bcc  ok
  73. jmp  syncerr;zuviele Zyklen
  74.  
  75. :oklsr;halbieren
  76. bcc  onecycle
  77. sta  restcycle+1
  78.  
  79. :restcyclebpl  restcycle ;Zeitausgleich durch
  80. nop ;Anzahl der NOPs
  81. nop
  82. nop
  83. nop
  84. nop
  85. nop
  86. lda  #$30 ;Hires display
  87. sta  $d011 ;und 1. DMA in Zeile $030
  88.  
  89. nop;6 Zyklen warten
  90. nop
  91. nop
  92.  
  93. ldx  #$00 ;Erzeugung
  94. lda  tb18,x ;von
  95. sta  $d018 ;200 DMA-Zeilen
  96. lda  tb11,x
  97. sta  $d011
  98. inx
  99. cpx  #200
  100. bne  hamloop
  101.  
  102. :backjmp  $ea31 ;alte IRQ-Routine
  103.  
  104. :syncerrlda  #$4c ;Timer auf exact
  105. sta  $dc05;einen Bildschirm-
  106. lda  #$c7 ;durchlauf einstellen
  107. sta  $dc04
  108. jmp  back